#include <iostream>
#include <signal.h>
#include <functional>
#include <unistd.h>



int flag = 1;
void signal_handler(int sig)
{
    flag = 0;
    std::cout << "flag changed to 0" << std::endl;
}
int main()
{
    signal(SIGINT, signal_handler); // 设置信号处理函数
    while(flag) {
    }
    std::cout << "flag is 0, exit" << std::endl;
    return 0;
}











// 打印未处理的信号集
void PrintPending(sigset_t &set)
{
    for (int i = 1; i < 32; i++)
    {
        std::cout << (sigismember(&set, i) ? "1" : "0");
    }
    std::cout << std::endl;
}

int test3()
{
    sigset_t set;
    sigfillset(&set); // 将信号集全部置为1

    // 此时我们在栈上定义了一个sigset_t,但是并没有将其传递给进程中,也就是说进程中并没有进行设置
    // 将信号集设置进进程中
    sigprocmask(SIG_SETMASK, &set, nullptr); // 阻塞信号集中信号
    
    sigset_t sig_pending;
    while (1)
    {
        sigpending(&sig_pending); // 获取当前进程中未处理的信号集
        PrintPending(sig_pending);
        sleep(1);
    }
    return 0;
}

long long count = 0;
int test1()
{
    signal(SIGALRM, signal_handler);
    alarm(1);
    while (1)
        count++;

    return 0;
}

int test2()
{
    int a = 1;
    int b = 0;
    int c = a / b;
    sleep(1);
    return 0;
}
